package com.retail.order.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;

/**
 * @Author: 靳家振
 * @Date: 2024/3/6 15:11
 * @Description:
 **/

@Configuration
@EnableAsync
public class ExecutorConfig {

    @Bean(name = "insertOrderExecutors")
    public Executor insertOrderExecutors(){
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor ();
        //配置核心线程数
        executor.setCorePoolSize (15);
        //配置最大线程数
        executor.setMaxPoolSize (25);
        //配置队列大小
        executor.setQueueCapacity (200);
        //配置线程池中的线程名称前额
        executor.setThreadNamePrefix ("async-InsertOrder-");
        //rejection-policy; 当pool已经达到max size的时候，如何处理新任务
        //CALLER——RUNS，不在新线程中执行任务，而是有调用者所在的线程执行
        executor.setRejectedExecutionHandler (new ThreadPoolExecutor.CallerRunsPolicy ());
        executor.initialize ();
        return executor;
    }
}
